import asyncio
from contextlib import contextmanager


@contextmanager
def my_context():
    # 1. __enter__ 部分：进入  with 时执行
    print("Entering context")
    resource = "acquire_async_resource"  # 模拟异步获取资源
    try:
        # 2. yield：将资源提供给 async with 块使用
        yield resource
        # 4. 如果  with 块正常结束，代码会从这里继续
        print("Exiting normally")
    except Exception as e:
        # 5. 如果  with 块发生异常，代码会从这里继续
        print(f"Exiting with exception: {e}")
        # 可以选择是否处理异常
        # 如果不想抑制异常，需要重新抛出
        raise
    finally:
        # 3. __exit__ 部分：无论如何都会执行清理
        print("Cleaning up")
        # "release_async_resource"  # 模拟异步释放资源


def main():
    # 使用上下文管理器
    with my_context() as r:
        # 3. 这里正在使用资源 ‘r’
        print(f"Using resource: {r}")
        # 可以在这里进行各种异步操作
        # 如果这里发生异常，会被上面的 except 捕获


main()
